package cn.iocoder.yudao.module.member.vip.service;

import cn.iocoder.yudao.framework.business.eligibility.service.AppEligibilityService;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.api.member.vip.enums.VipTypeEnum;
import cn.iocoder.yudao.module.api.member.vip.vo.VipUserSummaryVO;
import cn.iocoder.yudao.module.api.member.vip.vo.VipUserVO;
import cn.iocoder.yudao.module.member.vip.dal.dataobject.VipOrderDO;
import cn.iocoder.yudao.module.member.vip.dal.dataobject.VipUserDO;
import jakarta.annotation.Nullable;

/**
 * 会员 Service 实现类
 *
 * @author 山野羡民
 */
public interface AppVipUserService extends AppEligibilityService<VipUserDO, VipOrderDO> {

    /**
     * 校验会员是否有效
     *
     * @param userId 用户编号
     * @param vipType 会员类型
     * @return 会员信息
     */
    boolean isValid(Long userId, @Nullable VipTypeEnum vipType);

    /**
     * 获得会员汇总
     *
     * @param shopId 店铺编号
     * @return 会员汇总信息
     */
    VipUserSummaryVO getVipSummaryByBindShopId(Long shopId);

    /**
     * 获得会员分页
     *
     * @param current 当前页
     * @param size 每页条数
     * @param valid 是否有效
     * @param shopId 店铺编号
     * @return 会员分页
     */
    PageResult<VipUserVO> getPage(Integer current, Integer size, Boolean valid, Long shopId);

    /**
     * 会员过期
     *
     * @return 过期个数
     */
    int vipExpireBySystem();

}